// 封装购物车仓库
import { defineStore } from 'pinia'
import { ref, computed } from 'vue'
import { useUserStore } from './user'
import { addCartAPI , getCartListAPI, delCartAPI} from '@/apis/cart'
// 用户数据仓库对象
const userStore = useUserStore()

// 是否登录
const isLogin = computed(() => userStore.userInfo.token)

// 购物车仓库实例
export const useCartStore = defineStore('cart', ()=>  {
    
    // 购物车数据
    const cartData = ref([])

    // 添加购物车
    const addCart = async (goods) => {
        // 登录状态判断
        if (isLogin.value) {
            // 已登录。操作线上数据

            // 1.调用加入购物车接口
            await addCartAPI({
                skuId: goods.skuId,
                count: goods.count
            })
            // console.log(res);

            // 2.调用获取购物车列表接口
            getNewCartData()
        } else {
            // 未登录，操作本地数据
             // 判断购物车中是否已经存在该商品
            const cartItem = cartData.value.find(item => item.skuIid === goods.skuId)
            if(cartItem) {
                // 存在则更新数量
                cartItem.count += goods.count
            } else {
                // 不存在则添加新商品
                cartData.value.push(goods)
            }
        }
       
    }

    // 删除购物车
    const deleteCart = async (skuId) => {
        // 判断是否登录
        if (isLogin.value) {
            // 登录成功
            // 1.调用删除接口
            await delCartAPI([skuId])
        
            // 2.获取购物车数据
            getNewCartData()
        } else {
            // 未登录，操作本地数据
            cartData.value = cartData.value.filter(item => item.skuId !== skuId)

        }
    }

    // 切换单选状态
    const changeRadio = (value, skuId) => {
        const idx = cartData.value.find(item => item .skuId === skuId)
        idx.selected = value
    }

    // 全选操作
    const selectAll = (value) => {
        cartData.value.forEach(item => item.selected = value)
    }

    // 修改商品数量
    const changeCount = (count, skuId) => {
        const idx = cartData.value.find(item => item.skuId === skuId)
        idx.count = count
    }

    // 清除购物车
    const clearCart = () => {
        cartData.value = []
    }
    
    // 获取最新购物车数据
    const getNewCartData = async () => {
        const res = await getCartListAPI()
        // console.log(res2);
        cartData.value = res.result
    }
    return {
        cartData,
        addCart, 
        deleteCart,
        changeRadio,
        selectAll,
        changeCount,
        clearCart,
        getNewCartData
    }
}, {
    persist: true // 开启数据持久化
})